<?php
/*****************************************************************************
 *                   Projet MESI : Algo génétique Asynchrone                 *
 *                      Guillaume MONTAVON & Renaud DAVID                    *
 *                                                                           *
 *                   Fichier contenant l'API du projet                       *
 *          Toutes les requêtes XMLHttpRequest appeleront ce fichier         *
 *     (exemple de requête : requete.php?objet=obtenirIndiv&idProbleme=1)    *
 *****************************************************************************/

include_once("fonctions.inc.php");

if(isset($_GET['objet'])) {
	
	// escaping and slashing all POST and GET variables. you may add $_COOKIE and $_REQUEST if you want them sanitized. 
	array_walk_recursive($_POST, 'sanitizeVariables');
	
	//si on n'est pas connecté
	switch($_GET['objet']) {
		//retourne la structure des individus (nombre de gènes, taille, ...)
		case 'demanderStructureIndividu' :
			if(isset($_GET['idProbleme']))
				echo demanderStructureIndividu(intval($_GET['idProbleme']));
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//ajoute un individu à la BdD (contenu dans le JSON)
		case 'creerIndividu' :
			if(isset($_POST['liste_gene'])) {
				if(creerIndividu($_POST['liste_gene']))
					echo '{"success": true}';
				else
					echo '{"success": false, "message": "erreur bdd"}';
			}
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//on envoie au client un individu aléatoire non évalué sous le format JSON
		case 'obtenirIndivNonEval' :
			if(isset($_GET['idProbleme']))
				echo obtenirIndiv(intval($_GET['idProbleme']), true);
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//on envoie au client un individu aléatoire actif sous le format JSON
		case 'obtenirIndiv' :
			if(isset($_GET['idProbleme']))
				echo obtenirIndiv(intval($_GET['idProbleme']), false);
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//on envoie la formule d'évaluation au client
		case 'obtenirFonctionEval' :
			if(isset($_GET['idProbleme']))
				echo obtenirFonctionEval(intval($_GET['idProbleme']));
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//on enregistre dans la BdD, le fitness qu'un des clients a calculé
		case 'evaluer' :
			if(isset($_GET['idIndiv']) and isset($_GET['fitness'])) {
				if(enregistrementFitness(intval($_GET['idIndiv']), $_GET['fitness']))
					echo '{"success": true}';
				else
					echo '{"success": false, "message": "erreur bdd"}';
			}
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//met à jour les caractéristiques d'un individu (utilisé par la mutation)
		case 'updateIndiv' :
			if(isset($_POST['jsonIndiv'])) {
				if(updateIndiv($_POST['jsonIndiv']))
					echo '{"success": true}';
				else
					echo '{"success": false, "message": "erreur bdd"}';
			}
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//envoie au serveur 2 individus parents en utilisant la roue de la fortune
		case 'selection' :
			if(isset($_GET['idProbleme']))
				echo selection(intval($_GET['idProbleme']), 2);
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//enregistre les 2 nouveaux individus envoyé par un client
		case 'reproduction' :
			if(isset($_POST['listeEnfants'])) {
				if(enregistrementNvlleGenereation($_POST['listeEnfants']))
					echo '{"success": true}';
				else
					echo '{"success": false, "message": "erreur bdd"}';
			}
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//désactive un individu (utilisé par le client de prédation)
		case 'tuerIndiv' :
			if(isset($_GET['idProbleme'])) {
				if(predation(intval($_GET['idProbleme'])))
					echo '{"success": true}';
				else
					echo '{"success": false, "message": "pas d\'individus à tuer"}';
			}
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//arrête le traitement du problème
		case 'arreterTraitement' :
			if(isset($_GET['idProbleme'])) {
				if(arreterTraitement(intval($_GET['idProbleme'])))
					echo '{"success": true}';
				else
					echo '{"success": false, "message": "erreur"}';
			}
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//envoie au client l'état actuel de la population (nombre de création, ...)
		case 'etatPop' :
			if(isset($_GET['idProbleme']))
				echo getEtatPop(intval($_GET['idProbleme']));
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//envoie le meilleur individu de la population
		case 'meilleurIndiv' :
			if(isset($_GET['idProbleme']))
				echo meilleurIndiv(intval($_GET['idProbleme']));
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//modifie le nombre maximum d'individus créés (condition d'arrêt) , la taille maximale et minimale de la population, ...
		case 'modifierTaillePop' :
			if(isset($_GET['idProbleme']) and isset($_GET['maxActif']) and isset($_GET['minActif']) and isset($_GET['maxCreation']) and isset($_GET['traitement']) 
				and $_GET['maxCreation'] > $_GET['maxActif'] and $_GET['maxActif'] > $_GET['minActif'] and $_GET['minActif'] >= 0) {
				if(modifierTaillePop(intval($_GET['idProbleme']), intval($_GET['maxActif']), intval($_GET['maxCreation']), intval($_GET['minActif']), intval($_GET['traitement'])))
					echo '{"success": true}';
				else
					echo '{"success": false, "message": "erreur"}';
			}
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		//vide la population afin de recommencer le problème
		case 'viderPopulation' :
			if(isset($_GET['idProbleme'])) {
				if(viderPopulation(intval($_GET['idProbleme'])))
					echo '{"success": true}';
				else
					echo '{"success": false, "message": "erreur"}';
			}
			else
				echo '{"success": false, "message": "il manque des paramètres dans la requête"}';
			break;
		
		default :
			echo '{"success": false, "message": "objet inconnu"}';
			break;
	}

}
else
	echo '{"success": false, "message": "pas d\'objet"}';

mysql_close($link);
?>
